/*
 * EnchantedMazeGame.h
 *
 *  Created on: Jan 11, 2013
 *      Author: quanpv
 */

#ifndef ENCHANTEDMAZEGAME_H_
#define ENCHANTEDMAZEGAME_H_

#include "MazeGame.h"
#include "EnchantedRoom.h"
#include "DoorNeedingSpell.h"

class EnchantedMazeGame: public MazeGame {
public:
	EnchantedMazeGame();
	virtual ~EnchantedMazeGame();

	virtual boost::shared_ptr<Room> MakeRoom(int n) const
		{
			return boost::shared_ptr<Room>(new EnchantedRoom(n, CastSpell()));
		}

	virtual boost::shared_ptr<Door> MakeDoor(boost::shared_ptr<Room> r1, boost::shared_ptr<Room> r2) const
		{
			return boost::shared_ptr<Door>(new DoorNeedingSpell(r1, r2));
		}

protected:
	boost::shared_ptr<Spell> CastSpell() const;
};

#endif /* ENCHANTEDMAZEGAME_H_ */
